package sv.com.seguros.dao.ctg;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import sv.com.seguros.dao.BaseDaoImpl;
import sv.com.seguros.dto.ctg.CtgAseguradora;
import sv.com.seguros.exception.WebException;

public class CtgAseguradoraDaoImpl extends BaseDaoImpl implements CtgAseguradoraDao{

	@SuppressWarnings("unchecked")
	public List<Object[]> findAllActivesAsArray() throws WebException{
		DetachedCriteria criteria = DetachedCriteria.forClass(CtgAseguradora.class);
		criteria.add(Restrictions.eq("ctgAseguradoraActivo", "1"));
		criteria.addOrder(Order.asc("ctgAseguradoraNombre"));
		criteria.setProjection(Projections.projectionList().
				add(Projections.property("ctgAseguradoraId")).
				add(Projections.property("ctgAseguradoraNombre"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}
	
	@SuppressWarnings("unchecked")
	public List<Object[]> findAllAsArray() throws WebException{
		DetachedCriteria criteria = DetachedCriteria.forClass(CtgAseguradora.class);
		criteria.addOrder(Order.asc("ctgAseguradoraNombre"));
		criteria.setProjection(Projections.projectionList().
				add(Projections.property("ctgAseguradoraId")).
				add(Projections.property("ctgAseguradoraNombre")).
				add(Projections.property("ctgAseguradoraActivo")).
				add(Projections.property("ctgAseguradoraTelefono1")).
				add(Projections.property("ctgAseguradoraCiudad")).
				add(Projections.property("ctgAseguradoraDireccion"))
			);
		return (List<Object[]>) findByCriteria(criteria);
	}
	
	public void delete(Long ctgAseguradoraId) throws WebException{
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("ctgAseguradoraId", ctgAseguradoraId);
		String hqlQuery = "delete from CtgAseguradora where ctgAseguradoraId = :ctgAseguradoraId";
		try {
			executeNonHibernateQuery(hqlQuery, parameters);
		} catch (Exception e) {
			throw new WebException("Problemas al tratar de eliminar el registro <br />Registro puede estar asociado a un Cliente, Poliza, etc");
		}
	}
	
	public void toggleActive(Long ctgAseguradoraId, String ctgAseguradoraActivo) throws WebException{
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("ctgAseguradoraId", ctgAseguradoraId);
		parameters.put("ctgAseguradoraActivo", "1".equals(ctgAseguradoraActivo) ? "0" : "1");
		String hqlQuery = "update CtgAseguradora set ctgAseguradoraActivo = :ctgAseguradoraActivo where ctgAseguradoraId = :ctgAseguradoraId";
		try {
			executeNonHibernateQuery(hqlQuery, parameters);
		} catch (Exception e) {
			throw new WebException("Problemas al actualizar la informaci\u00F3n");
		}
	}
}
